#include "Dri_MQTT.h"
#include "Dri_NVS.h"
#include "Dri_WIFI.h"
#include "Inf_ES8311.h"
#include "string.h"
#include <stdio.h>
#include "Inf_OV2640.h"
#include "App_Sound_Vido.h"

uint8_t data[1024] = {0};

// main任务句柄
TaskHandle_t main_task_handle = NULL;
/**
 * @brief 回调函数启动WIFI
 *
 */
void main_wifi_ok(void) {
  // 初始化MQTT
  Dri_MQTT_Init();
  // 初始化 声音 WebSocket客户端
  App_WebSocket_Init();
}

void app_main(void) {
  Dri_NVS_Init();
  Dri_NVS_DelAll();
  vTaskDelay(1000);

  // 获取当前任务句柄
  main_task_handle = xTaskGetCurrentTaskHandle();
  Inf_ES8311_Init();
  Dri_WIFI_Init(main_wifi_ok);
  // 摄像头初始化
  Inf_OV2640_Init();

  while (1) {
    // 清空数据
    // memset(data, 0, sizeof(data));
    // 从麦克风读取数据
    // Inf_ES8311_ReceData((char *)data, 1024);

    // // 发送至扬声器
    // Inf_ES8311_SendData((char *) data, 1024);

    // vTaskDelay(10);

    // 等待任务通知
    uint32_t action = ACTION_AUDIO_VIDEO_NO;
    xTaskNotifyWait(UINT32_MAX, UINT32_MAX, &action, portMAX_DELAY);
    switch (action) {
      case ACTION_AUDIO_ESP2CLIENT_ON:
        printf("音频  门铃 -> 主人  开\r\n");
        App_WebSocket_Sound_Start(SOUND_DIR_ESP2CLIENT);
        break;
      case ACTION_AUDIO_ESP2CLIENT_OFF:
        printf("音频  门铃 -> 主人  关\r\n");
        App_WebSocket_Sound_Stop(SOUND_DIR_ESP2CLIENT);
        break;
      case ACTION_AUDIO_CLIENT2ESP_ON:
        printf("音频  主人 -> 门铃  开\r\n");
        App_WebSocket_Sound_Start(SOUND_DIR_CLIENT2ESP);
        break;
      case ACTION_AUDIO_CLIENT2ESP_OFF:
        printf("音频  主人 -> 门铃  关\r\n");
        App_WebSocket_Sound_Stop(SOUND_DIR_CLIENT2ESP);
        break;

      case ACTION_VIDIO_ESP2CLIENT_ON:
        printf("视频  门铃 -> 主人  开\r\n");
        App_WS_Video_Client_Start();
        break;
      case ACTION_VIDIO_ESP2CLIENT_OFF:
        printf("视频  门铃 -> 主人  关\r\n");
        App_WS_Video_Client_Stop();
        break;
      default:
        break;
    }
  }
}
